TypeScript 可以為函式的參數指定型別:
function add(a: number, b: number) {
const sum = a + b
console.log(sum)
}
TypeScript 也可以指定函式 return
內容的型別,以上面的例子來說,我們並沒有 return
任何東西,因此我們可以在 return
型別的部分使用 void
:
function add(a: number, b: number): void {
const sum = a + b
console.log(sum)
}
當有 return
值時,我們可以指定型別也可以不指定型別,因為 TypeScript 會自動幫我們推斷 return
內容的型別:
function add(a: number, b: number): number {
const sum = a + b
return sum
}
或是
function add(a: number, b: number) {
const sum = a + b
return sum
}
函式型別指定的語法看起來與箭頭函式類似,但它實際上是 TypeScript 用來指定函式型別的一種語法。
在下面的例子中,我們新增了一個傳入的函式 fn
,我們一樣需要為這個函式的參數指定型別,箭頭後指的則是 return
的型別:
function calculate(a: number, b: number, fn: (a: number, b: number) => number) {
return fn(a, b)
}
搭配我們先前的例子,合併後的完整程式碼如下:
function add(a: number, b: number) {
const sum = a + b
return sum
}
function calculate(a: number, b: number, fn: (a: number, b: number) => number) {
return fn(a, b)
}
calculate(1, 2, add) // 3
這邊稍微解釋為什麼我們不把型別設為 undefined
,像是這樣:
function add(a: number, b: number): undefined {
const sum = a + b
console.log(sum)
}
在我們的例子中,以及實務上的應用,不設為 undefined
有以下幾個主要的原因:
void
的語義更清晰:void
在 TypeScript 中表示「沒有返回值」,這表明函式的設計意圖就是不返回任何東西,這是對開發者更直觀的表達。當我們看到 void
時,我們會立刻知道這個函式不會有明確的返回值。undefined
,雖然技術上表示「沒有定義的值」,但它在 JavaScript 中是一個實際的值。當你用 undefined
作為返回型別時,實際上意味著函式的返回值必須是 undefined
,而不是「沒有返回值」。這樣可能會誤導開發者認為函式實際上是返回了 undefined
。
避免潛在的誤解:
在 JavaScript 中,函式不返回任何東西時,會默認返回 undefined
。然而,使用 undefined
作為返回型別可能會讓人誤解該函式是故意返回 undefined
,而不是因為沒有 return
。
而使用 void
明確表示「函式不返回值」,避免了這種誤解。
實際應用上的區別:當你將 undefined
設為返回型別時,TypeScript 會強制要求函式明確返回 undefined
,否則會報錯。因此,如果沒有明確的 return undefined
,TypeScript 會視為不符合型別定義:
function example(): undefined {
return undefined; // 正常
}
慣例和語義上的一致性:
在 TypeScript 和其他強型別語言中,使用 void
來表示函式沒有返回值是一種通用的做法,這樣可以保持代碼的一致性和可讀性。